package com.example.myandroidapp

import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Spinner
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

/*
* 文本适配器：ArrayAdapter(context: Context, resource: Int, objects: Array<T>)
*
* 1. context: Context
  ○ 含义：当前上下文（通常是 Activity 或 Fragment）
  ○ 作用：用于访问应用资源和系统服务
  ○ 示例：this（在 Activity 中）或 requireContext()（在 Fragment 中）
2. resource: Int
  ○ 含义：布局资源 ID（R.layout.xxx）（某某xml布局组件的）
  ○ 作用：定义每个列表项的视图布局
  ○ 常用值：
    ■ android.R.layout.simple_list_item_1：系统默认的单行文本布局
    ■ android.R.layout.simple_spinner_item：Spinner 默认布局
    ■ R.layout.custom_item：自定义布局
  ○ 注意：此布局必须包含一个 TextView（或其子类）
3. objects: Array<T>
  ○ 含义：数据源数组（泛型 T）
  ○ 作用：提供要显示的数据
  ○ 类型：
    ■ 基本类型数组：Array<String>, Array<Int> 等
    ■ 对象数组：Array<City>（需要重写对象的 toString() 方法）
*/
class CityActivity : AppCompatActivity() {

    // 1. 定义城市列表
    private val cityList = listOf<String>("北京", "上海", "广州", "深圳", "杭州", "南京", "西安")

    // 2. 定义变量接收下拉列表
    private var spDropdown: Spinner? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_city)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        // 1. 获取下拉组件
        spDropdown = findViewById(R.id.spinner)
        // 2. 声明一个数组适配器
        var adapter = ArrayAdapter(this, R.layout.activity_item_select, cityList)
        // 3. 把适配器设置给下拉列表
        spDropdown?.adapter = adapter
        // 4. 设置下拉框默认选中第一项
        spDropdown?.setSelection(0)

        // 如果设置的模式为dialog
        spDropdown?.prompt = "请选择城市"

        // 5. 监听选择了哪一项
        spDropdown?.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(
                parent: AdapterView<*>?,
                view: View?,
                position: Int,
                id: Long
            ) {
                Toast.makeText(
                    this@CityActivity,
                    "你选择了" + cityList[position],
                    Toast.LENGTH_SHORT
                ).show()
            }

            override fun onNothingSelected(parent: AdapterView<*>?) {
                TODO("Not yet implemented")
            }
        }

    }
}